import { loginAPI } from '@/api'
import { getToken, setToken, removeToken } from '@/utils/auth'

export default {
  // 定义模块的状态数据 保存着可以在整个模块中被访问和修改的数据
  state: {
    token: getToken() // 初始化的时候从本地缓存读取
  },
  // 在 Vuex 中是用于同步修改 state 的函数，它们接收 state 对象作为第一个参数，
  // 后面可以接收其他额外的参数（根据具体业务需求而定），并且只能进行同步操作，不能包含异步逻辑
  mutations: { // 在组件的方法中通过 this.$store.commit('方法名',参数) 来调用 mutations
    setToken(state, token) {
      state.token = token
      // 同步到持久化
      setToken(token)
    },
    removeToken(state) {
      state.token = null
      removeToken() // 删除本地缓存的token
    }
  },
  // 用于放置包含异步操作的逻辑，比如发送网络请求
  actions: { // 用 this.$store.dispatch('方法名',参数)  来调用 actions
    /* login(store, data) {
      store.commit('setToken', '123456')
    } */
    // store是框架层传入的
    login(store, data) {
      setTimeout(async() => {
        // console.log(data)
        // store.commit('setToken', '123456') // 提交token
        store.commit('setToken', await loginAPI(data))
      }, 0)
    }
  },
  // 表示这个 Vuex 模块启用了命名空间
  namespaced: true
}

